package com.zhiyou100.api.exception_demo;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.InputMismatchException;
import java.util.Scanner;

public class Demo2 {

    public static void main(String[] args) {
        test2();
    }

    /**
     * try{} catch(){} 语句中，当try里面的代码可能发生多个异常时，我们可以写多个catch进行捕获
     * 如果这多个异常没有继承关系是，顺序无关紧要
     * 如果捕获的多个异常有继承关系，建议先捕获具体子类异常，再捕获父类异常
     * 如果我们捕获的多个异常是有继承关系的，我们可以只捕获父类异常（多态）
     */
    public static void test2() {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date1 = null;
        int[] arr = null;
        Scanner scanner = new Scanner(System.in);
        try {
            String s = scanner.next();
            date1 = sdf.parse("2020-01-05");
            int i = 1 / 0;
            arr[0] = 1;
        } catch (ArithmeticException e) {
            System.out.println("这是一个算法异常");
            System.out.println(e);
        } catch (ParseException e) {
            System.out.println("这是一个解析日常");
            e.printStackTrace();
        } catch (NullPointerException e) {
            System.out.println("这是一个空指针异常");
            e.printStackTrace();
        } catch (RuntimeException e) {
            System.out.println("这是一个运行异常");
            e.printStackTrace();
        }finally {
            //最终执行   不管有无异常都会执行
            System.out.println("执行资源回收......");
            scanner.close();
        }
        System.out.println("---------");
    }


    public static void test() {
        /**
         * 编写一个录入用户姓名、年龄和性别的程序，
         * 要求能捕捉年龄不为数字时的异常。
         * 在这里使用 try catch 语句来实现，具体代码如下：
         */
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入姓名：");
        String name = scanner.next();
        System.out.println("请输入年龄");
        int age = 0;
        //手动捕获异常
        try {
            age = scanner.nextInt();
        } catch (InputMismatchException e) {
            System.out.println("输入的年龄要求是整数");
            //打印异常的默认堆栈跟踪信息
//            e.printStackTrace();
            String s = e.toString();
            System.out.println("s = " + s);
        }
        System.out.println("请输入性别");
        String sex = scanner.next();
        if (!(sex.equals("男") || sex.equals("女"))) {
            sex = null;
            //手动在程序中通过throw抛出一个异常
            throw new InputMismatchException("性别只能是男或女");
        }
        System.out.println("姓名：" + name + "\t年龄：" + age + "\t性别：" + sex);
    }


}

